package dao;

import dao.banco.ConFactory;
import java.sql.*;
import java.util.Vector;
import javax.swing.*;
import modelo.dominio.*;

public class DaoLogin {
    
   private final String URL = "jdbc:mysql://localhost/bd_locarrao",  
         NOME = "root", SENHA = "locarrao2";  
  
   private Connection con;  
   private Statement comando;
   
  
   public void apagar(String cpf) {  
      conectar();  
      try {  
         comando.executeUpdate("DELETE FROM tb_login WHERE cpf = '" + cpf  
                     + "';");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao apagar pessoas", e.getMessage());  
      } finally {  
         fechar();  
      }  
   }  
   
   /**
    * busca por todos os logins do banco de dados.
    * @return vetor de logins.
    */
   public Vector<Login> buscarTodos() {  
      conectar();  
      Vector<Login> resultados = new Vector<Login>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_login");  
         while (rs.next()) {  
            Login temp = new Login();  
            // pega todos os atributos da pessoa 
            temp.setCpf(rs.getString("cpf"));  
            temp.setNome(rs.getString("nome"));  
            temp.setSenha(rs.getString("senha"));  
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar login", e.getMessage());  
         return null;  
      }  
   }  
  
   public void atualizar(Login login) {  
      conectar();  
      String com = "UPDATE tb_login SET nome = '" + login.getNome()  
            + "', senha ='" + login.getSenha()  
            + "' WHERE  cpf = '" + login.getCpf() + "';";  
      System.out.println("Atualizada!");  
      try {  
         comando.executeUpdate(com);  
      } catch (SQLException e) {  
         e.printStackTrace();  
      } finally {  
         fechar();  
      }  
   }  
   
   /**
    * Busca por determinado logico com paramentro do cpf.
    * @param cpf parametro para busca do login
    * @return objeto de login.
    */
   public Login buscar(String cpf) {  
      conectar();    
      ResultSet rs;

      try {  
         Login temp = new Login() ;

         rs = comando.executeQuery("SELECT * FROM tb_login WHERE cpf LIKE '"+cpf+"%';");
         if (!rs.next())
         JOptionPane.showMessageDialog(null, "Login não existe."); 
         else{
         //throw new SQLException("erro ao ler o cpf: " +cpf );
   
        // pega todos os atributos do login
            temp.setCpf(rs.getString("cpf"));  
            temp.setNome(rs.getString("nome"));  
            temp.setSenha(rs.getString("senha"));  
            temp.setPermissao(rs.getInt("permissao"));

            return temp;
         }
         return null;
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar login", e.getMessage());  
         return null;  
      }

  
   }  
  
   /**
    * Insere no banco de dados um login.
    * @param login login a ser inserido.
    */
   public void insere(Login login){  
      conectar();  
      try {    
         comando.executeUpdate("INSERT INTO `bd_locarrao`.`tb_login` (`cpf`,`senha`,`nome`,`permissao`) VALUES ('" + login.getCpf() + "','" + login.getSenha() + "', '" + login.getNome() + "', '" + login.getPermissao() +"')");
         System.out.println("Inserida!");
      } catch (SQLException e) {  
         imprimeErro("Erro ao inserir login", e.getMessage());  
      } finally {  
         fechar();
      }  
   } 
   
   /**
    * conecta com o banco de dados.
    */
   private void conectar() {  
      try {  
         con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);  
         comando = con.createStatement();  
         System.out.println("Conectado!");  
      } catch (ClassNotFoundException e) {  
         imprimeErro("Erro ao carregar o driver", e.getMessage());  
      } catch (SQLException e) {  
         imprimeErro("Erro ao conectar", e.getMessage());  
      }  
   }  
  
   /**
    * fecha o banco de dados.
    */
   private void fechar() {  
      try {  
         comando.close();  
         con.close();  
         System.out.println("Conexão Fechada");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao fechar conexão", e.getMessage());  
      }  
   }  
  
   private void imprimeErro(String msg, String msgErro) {  
      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
      System.err.println(msg);  
      System.out.println(msgErro);  
      System.exit(0);  
   }  

    
    
}
